﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using AgileSaude.Entities;
using AgileSaude.Business.Validation;
using AgileSaude.Data.Repository;
using AgileSaude.Data;
using FBS.Framework;
using AgileSaude.Business.Process;
using System.IO;

namespace AgileSaude.Business
{
    public class MedicoFacade
    {
        public List<MedicoEntities> Listar(MedicoEntities pFiltro, ref Resultado resultado)
        {
            return new MedicoProcess().Listar(pFiltro, ref resultado);
        }

        public List<MedicoEntities> ListarMedicos(MedicoEntities pFiltro, ref Resultado resultado)
        {
            return new MedicoProcess().Listar(false, pFiltro, ref resultado);
        }

        public List<MedicoEntities> ListarMedicos(ref Resultado resultado)
        {
            return new MedicoProcess().Listar(false, ref resultado);
        }

        public List<MedicoEntities> ListarClinicas(MedicoEntities pFiltro, ref Resultado resultado)
        {
            return new MedicoProcess().Listar(true, pFiltro, ref resultado);
        }

        public List<MedicoEntities> ListarClinicas(ref Resultado resultado)
        {
            return new MedicoProcess().Listar(true, ref resultado);
        }

        public List<MedicoEntities> ListarPorTipo(int pTipoServico, int pCidade, ref Resultado resultado)
        {
            return new MedicoProcess().ListarPorTipo(pTipoServico, pCidade, ref resultado);
        }

        public Resultado Ativar(int pIdMedico)
        {
            return new MedicoProcess().AtivarInativar(pIdMedico, true);
        }

        public Resultado Inativar(int pIdMedico)
        {
            return new MedicoProcess().AtivarInativar(pIdMedico, false);
        }

        public MedicoEntities GetMedico(int pIdMedico)
        {
            return new MedicoProcess().GetMedico(pIdMedico);
        }

        public MedicoEntities GetMedico(string pNome)
        {
            return new MedicoProcess().GetMedico(pNome);
        }

        public Resultado Incluir(MedicoEntities pUsr, string fileImage)
        {
            MedicoProcess mp = new MedicoProcess();

            Resultado result = mp.Incluir(pUsr);
            MedicoEntities medico = mp.GetMedico(pUsr.Nome);
            MoveImage(fileImage, medico.idMedico);
            return result;
        }

        public Resultado Alterar(MedicoEntities pUsr, string fileImage)
        {
            Resultado result = new MedicoProcess().Alterar(pUsr);
            MoveImage(fileImage, pUsr.idMedico);
            return result;
        }

        private void MoveImage(string fileImage, int IdMedico)
        {
            try
            {
                if (File.Exists(fileImage))
                {
                    string fileTo = System.Web.HttpContext.Current.Server.MapPath("~/ImageMedico/" + IdMedico.ToString() + ".jpg");//Path.GetExtension(fileImage));
                    File.Move(fileImage, fileTo);
                }
            }
            catch
            { }
        }
    }
}
